package cn.demoncat.util.zookeeper;

import javax.annotation.Resource;

import org.apache.curator.framework.CuratorFramework;
import org.springframework.stereotype.Component;

import cn.demoncat.util.zookeeper.entity.ZkTask;

/**
 * Zookeeper操作工具 - 使用连接池
 * 
 * @author 延晓磊
 *
 * @since 2018年11月2日
 */
@Component("zkPoolUtil")
public class ZkPoolUtil extends ZkUtil {

	@Resource
	private ZkConnectionUtil zkConnectionUtil;
 
	/**
	 * 连接ZK并执行操作 - 新建连接
	 * 
	 * @param task	回调任务
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2018年11月2日
	 */
	@Override
	public <T> T execute(ZkTask<T> task) {
		// 获取连接
		CuratorFramework conn = zkConnectionUtil.getPoolConnection();
		// 执行操作
		try {
			return task.execute(conn);
		} finally {
			// 返回连接
			zkConnectionUtil.returnPoolConnection(conn);
		}
	}
	
}
